#include "spiTest.h"
// PA567 PB131415
// RM102 配置
// 学一下轮询


// RS GPIO P27

void spi_gpio_init(){
  gpio_init_type gpio_initstructure;
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_initstructure);
  
  // spi1 sck pin 
  //m是推挽复用
  gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
  gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_initstructure.gpio_pull           = GPIO_PULL_NONE;   // 不上下拉
  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX; 
  gpio_initstructure.gpio_pins = GPIO_PINS_5;
  gpio_init(GPIOA, &gpio_initstructure);
  
  // spi1 mosi pin
  // mosi是推挽复用
  //主机发送从机接收 只是显示屏 但是不能触摸
  gpio_initstructure.gpio_pull           = GPIO_PULL_NONE;  
  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX; 
  gpio_initstructure.gpio_pins = GPIO_PINS_7;
  gpio_init(GPIOA, &gpio_initstructure);

  //RST,DC,CS,BLK
  // LED 所以需要配置 这个怎么看啊？
  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
  gpio_initstructure.gpio_mode           = GPIO_MODE_OUTPUT; 
  gpio_initstructure.gpio_pins = GPIO_PINS_1|GPIO_PINS_2|GPIO_PINS_3|GPIO_PINS_4;
  gpio_init(GPIOA, &gpio_initstructure);  
 
 //spi配置
  spi_init_type spi_init_struct;
  crm_periph_clock_enable(CRM_SPI1_PERIPH_CLOCK, TRUE);
  spi_default_para_init(&spi_init_struct);
  spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX; //配置屏幕,半双工
  spi_init_struct.master_slave_mode =SPI_MODE_MASTER; // 单片机->屏幕 主机
  spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
  spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB; //最高位发送
  spi_init_struct.frame_bit_num = SPI_FRAME_8BIT; //数据格式
  spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_LOW; //根据屏幕设备
  spi_init_struct.clock_phase = SPI_CLOCK_PHASE_1EDGE;
  spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE; //片选模式
  spi_init(SPI1, &spi_init_struct);
  spi_i2s_dma_transmitter_enable(SPI1,TRUE);
  spi_enable(SPI1, TRUE);


}

//换成spi3  

void spi_lcd_gpio_init(){
  gpio_init_type gpio_initstructure;
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_initstructure);
  
  // spi3 sck pin 修改 PB3 
  //m是推挽复用
  gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;  
  gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_initstructure.gpio_pull           = GPIO_PULL_NONE;   // 不上下拉
  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX; 
  gpio_initstructure.gpio_pins = GPIO_PINS_3;
  gpio_init(GPIOB, &gpio_initstructure);


  // spi3 miso PB4 
  
  // spi1 mosi pin PB5
  // mosi是推挽复用
  //主机发送从机接收 只是显示屏 但是不能触摸
  gpio_initstructure.gpio_pull           = GPIO_PULL_NONE;  
  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX; 
  gpio_initstructure.gpio_pins = GPIO_PINS_5;
  gpio_init(GPIOB, &gpio_initstructure);

  //RST,DC,CS,BUSY
// DC -B14 CS -C8  RST -C6 BUSY - C7
  gpio_initstructure.gpio_pull           = GPIO_PULL_UP;  
  gpio_initstructure.gpio_mode           = GPIO_MODE_OUTPUT; 
  gpio_initstructure.gpio_pins = GPIO_PINS_6|GPIO_PINS_7;
  gpio_init(GPIOC, &gpio_initstructure);  

  gpio_initstructure.gpio_pins = GPIO_PINS_14;
  gpio_init(GPIOB, &gpio_initstructure);  
 
 //spi配置
  spi_init_type spi_init_struct;
  crm_periph_clock_enable(CRM_SPI3_PERIPH_CLOCK, TRUE);
  spi_default_para_init(&spi_init_struct);
  spi_init_struct.transmission_mode = SPI_TRANSMIT_HALF_DUPLEX_TX; //配置屏幕,半双工
  spi_init_struct.master_slave_mode =SPI_MODE_MASTER; // 单片机->屏幕 主机
  spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_2;
  spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB; //最高位发送
  spi_init_struct.frame_bit_num = SPI_FRAME_8BIT; //数据格式
  spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_LOW; //根据屏幕设备
  spi_init_struct.clock_phase = SPI_CLOCK_PHASE_1EDGE;
  spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE; //片选模式
  spi_init(SPI3, &spi_init_struct);
  spi_i2s_dma_transmitter_enable(SPI1,TRUE);
  spi_enable(SPI3, TRUE);


}